本文是我在自学 Python 3.5 中遇到的一些知识梳理和一些技巧分享,Python 在简洁性、易读性以及可扩展性上优势明显,使用率呈线性增长,如果你想去学习一门新的设计语言或是开开眼界,那么我非常推荐你这个优美的能写出乐趣的语言 Python

基础知识

引用

1
2
3
4
5
a = 'ABC'
b = a
a = 'XYZ'
print(b)
\# 'ABC' b = a 使 b 指向的'ABC'地址,所以 b 没有被修改

转义

1
2
3
\t 表示一个制表符
\\ 表示 \ 字符本身
r'...' 表示不需要转义 但不能表示多行也不能表示包含' 和 '' 的字符串(可用 r'''...''' 解决)

编码

1
2
如果中文字符串在 Python 环境下遇到 UnicodeDecodeError,这是因为 .py 文件保存的格式有问题。可以在第一行添加注释
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8

计算

1
2
3
and or 均有短路计算(类似 Java 中 && ||)
因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True
返回结果为计算终止项

集合

1
当索引数字为负数时,表示逆序读出 List 中的内容,记住 List 的最后一个空间的编号为 -1 开始

1
单元素 tuple 时有歧义,Python 规定,单元素 tuple 要多加一个逗号 ",",t = (1,),多元素 tuple 最后加不加 "," 结果一样
1
2
3
1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict

网络

1
2
POST 请求下面必须加 {% csrf_token %} 否则403(安全)
跨站请求伪造(英语:Cross-site request forgery)

兼容 (Python 2 & Python 3)

1
2
3
4
urllib2-Python 官方基础模块 requests - 强大第三方包
Python 3.x中 urllib 库和 urilib2 库合并成了 urllib 库
其中 urllib2.urlopen() 变成了 urllib.request.urlopen()
urllib2.Request() 变成了 urllib.request.Request()

1
2
3
4
5
6
7
8
9
10
11
12
去除了 <>,全部改用 !=
去除 ``,全部改用 repr()
关键词加入 as 和 with,还有 True, False, None
整型除法返回浮点数,要得到整型结果,请使用//
加入 nonlocal 语句,使用noclocal x 可以直接指派外围(非全局)变量
去除 print 语句,加入 print() 函数实现相同的功能。同样的还有 exec 语句,已经改为 exec() 函数
改变了顺序操作符的行为,例如 x < y ,当 x 和 y 类型不匹配时抛出 TypeError 而不是返回随机布尔值
输入函数改变了,删除了 raw_input,用 input 代替
去除元组参数解包。不能 def(a, (b, c)):pass 这样定义函数了
Python3 字符串只有 str 一种类型,但它跟 2.x版本的 unicode 几乎一样
Python3 去除了 long 类型
大量模块变动

内建函数 BIF(built-in functions)

1
2
zip() 函数 可以把两个集合合并成一个集合
zip([10,20,30], ['a','b','c']) -> [(10, 'a'), (20, 'b'), (30, 'c')]

特殊方法(魔术方法)

1
2
3
4
5
6
特殊方法定义在 class 中,不需要直接调用,某些函数或操作符会调用对应的特殊方法
用于print的__str__(类似toString)
用于len的__len__
用于cmp的__cmp__ (Py3中已经移除, 需要引入 operator 模块 operator.eq(a, b))
直接调用实力对象 重写__call__
__str__()用于显示给用户,而__repr__()用于显示给开发人员

三方模块管理工具
1.easy_install 2.pip 官方推荐,已内置到2.7.9

Exception

1
raise Exception("") (类似于 throw)

Database

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Database API
https://www.python.org/dev/peps/pep-0249/ #官方接口规范 v2.0
访问数据库流程
1.创建 connection 2.获取 cursor 3.执行命令/处理数据 4.关闭 cursor 5.关闭 connection
connection 对象支持的方法
· cursor() # 使用该连接创建并返回游标
· commit() # 提交当前事务
· rollback() # 回滚当前事务
· close() # 关闭连接
事务: 访问和更新数据库的一个程序执行单元
- 原子性:事务中包括的诸操作要么都做,要么都不做
- 一致性:事务必须使数据库从一致性状态变到另一个一致性状态
- 隔离性:一个事务的执行不能被其他事务干扰
- 持久性:事务一旦提交,它对数据库的改变就是永久性的
开发中使用事务
· 关闭自动 commit: 设置 conn.autocommit(false) (mysql db 默认 false)
· 正常结束事务: conn.commit()
· 异常结束事务: conn.rollback()

Hacks 小技巧

1
2
int() 函数可以把字符串转换为整数 默认按十进制 第二参数 base='10'
中偏函数 int2 = functools.partial(int, base=2) #调用按二进制